package com.tiger.project.service;



import com.github.pagehelper.Page;
import com.tiger.project.domain.Asset;
import com.tiger.project.domain.AssetMonth;
import com.tiger.project.domain.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * 【资产列表】Service接口
 *
 * @author standard
 * @date 2022-09-15
 */
public interface IAssetService
{
    /**
     * 查询【资产列表】
     *
     * @param id 【资产列表】主键
     * @return 【资产列表】
     */
    public Asset selectAssetById(Long id);

    /**
     * 查询【资产列表】列表
     *
     * @param asset 【资产列表】
     * @return 【资产列表】集合
     */
    public List<Asset> selectAssetList(Asset asset);

    //账面价值 关联资产
    public List<Asset> selectAssetBookList(Asset asset);

    /**
     * 新增【资产列表】
     *
     * @param asset 【资产列表】
     * @return 结果
     */
    public int insertAsset(Asset asset);

    /**
     * 修改【资产列表】
     *
     * @param asset 【资产列表】
     * @return 结果
     */
    public int updateAsset(Asset asset);

    /**
     * 批量删除【资产列表】
     *
     * @param ids 需要删除的【资产列表】主键集合
     * @return 结果
     */
    public int deleteAssetByIds(Long[] ids);

    /**
     * 删除【资产列表】信息
     *
     * @param id 【资产列表】主键
     * @return 结果
     */
    public int deleteAssetById(Long id);

    /**
     * 工作台资产统计
     * @return
     */
    AssetCountResp listCount(Integer companyId);

    AssetRentCountResp rentCount(Integer companyId);

    ContractAnalysisVO contractAnalysisCount(String contractType, Integer companyId);

    List<Asset> idlePage( Asset asset);

    List<Asset> idleList(Long companyId);

    List<RentAssetVO> rentPage(Long companyId);

    List<RentAssetVO> rentList(Long companyId);

    AssetStatisticsVO getStatistics(Asset asset);

    List<MonitorAssetVO> monitorAssetPage( Asset asset);

    List<AssetStatisticsExportVO> landExportList(Long companyId);

    List<AssetStatisticsBasicVO> landBasicPage(Long companyId);

    List<AssetStatisticsUsedVO> landUsedPage(Long companyId);

    List<AssetStatisticsBasicVO> houseBasicPage(Long companyId);

    List<AssetStatisticsUsedVO> houseUsedPage(Long companyId);

    List<AssetStatisticsExportVO> houseExportList(Long companyId);

    ContractCountResp contractCount(Integer companyId);

    ContractPerformanceResp getPerformanceOfContract(Integer companyId);

    List<ContractOverdueRankingResp> getContractOverdueRanking(Integer companyId);

    List<AssetUsageVO> contractAnalysisPageList(String contractType, Integer companyId, String contractType1, Date startTime, Date endTime);

    List<Map<String,Object>> getHouseReceiptList(Integer companyId);
    List<Map<String,Object>> getLandReceiptList(Integer companyId);

    /**
     *  房屋空置天数排名： 排前十，无关联合同不排，且可租面积>0
     * @param companyId
     * @return 返回
     */
    List<Map<String, Object>> getVacantHouseList(Long companyId);

    /**
     *  总资产收益率: 总租金/可出租资产资产总价值（房屋价值）
     * @param companyId
     * @return 返回
     */
    Map<String, Object> getReturnOnTotalAssets(Long companyId);

    /**
     *  资产分类
     * @param companyId
     * @return 返回
     */
    List<Map<String, Object>> getAssetsCategory(Long companyId);

    /**
     *  获取多个工资的资产出租比例
     * @param companyIds
     * @return 返回
     */
    List<AssetMonth> getAssetsMonth(List<Long> companyIds);

    /**
     * 查询资产面积和资产价值
     *
     * @param companyId 公司id
     * @return 【资产面积】集合
     */
    public List<Map<String, Object>> getAssetAreaAndValue(Long companyId);

    /**
     * 查询被占用资产
     *
     * @param companyId 公司id
     * @return 【资产价值】集合
     */
    public List<Map<String, Object>> getBeOccupiedAsset(Integer companyId);
}
